[アップデート]CloudFormationにロールバック前にプロビジョニングエラーをトラブルシューティングするオプションが導入されました
こんにちは!オンジー(@onzuka_muscle)です。
なんだか熱そうなアップデートが来たので試してみます。
AWS CloudFormation users can now choose to preserve the state of successfully deployed resources in the event of CloudFormation stack operation errors. Using this feature, you can retry the operation using an updated CloudFormation template and quickly iterate through feedback loops, shortening development cycles.
「ロールバック前にプロビジョニングエラーをトラブルシューティングするオプションを導入し、デプロイを加速化」できるようになったとのこと。
これまでは、スタック操作に失敗すると、すべてのCloudFormationスタックのリソースが、正常に作成されたリソースの削除を含め、最後に確認された動作状態にロールバックされていました。
今回のリリースで、正常に作成されたリソースの状態を維持しながら、失敗したリソースの問題を修復し、再度プロビジョニングを試みることができるようになりました。
やってみた
とりあえずは今回はマネコンから見てみます。
テンプレート選択後のオプション選択画面で「スタックの失敗オプション(Stack failure options)」が追加されています。
今回追加されたオプションは下の「正常にプロビジョニングされたリソースの保持」です。
これまで唯一の選択肢であった「すべてのスタックリソースをロールバックする」も残ってます。
ミスがあるテンプレートでCREATE_STACKしてみる
VPCを作成後にEC2を起動するテンプレートを使用してます。
EC2の"ImageId"を存在しないIDにすることで「VPCは作成できるがEC2は作成できない」というテンプレートにしました。
「正常にプロビジョニングされたリソースの保持」オプションを有効にしてスタック作成すると
画面上部に出てきました!ここから失敗後のアクションが選べるんですね。
リソースタブを見ると正常に作成できたリソースは維持されており、EC2については「CREATE_FAILED」と一緒にエラーが表示されてます。
スタック操作が失敗した後
選択できるアクションについてはこんな感じです。
- 再試行
- 失敗したリソースのプロビジョニング操作を再試行する
- 更新
- テンプレートの更新時に作成または更新に失敗したリソースは再試行する
- ロールバック
- スタックを最後の既知の安定状態にロールバックする
エラーの原因である不正な"ImageId"を修正して「更新」してみましょう。
該当箇所だけ修正したテンプレートを選択し、更新します。
EC2も「CREATE_COMPLETE」になりました。
正常に作成できていたVPC等は残ってたので短時間でスタックの更新が完了しました。
以上です。
おわり
正常にプロビジョニングされたリソースをロールバックせずに、失敗した時点から開始することができるので、反復的な開発がラクになりました。
ただし本番環境で使うのはリソースによって正常に作成できたり・できなかったりすることで不整合がおきてしまう可能性もあるので不向きに感じました。全体ロールバックの方が安心できそうです。
そこは上手く使い分けていきましょう!